#include <stdio.h>
#include <conio.h>
#include <string.h>
//These thing will be add to the header
//1.Add
int m,n,i,j,*a,*b,d,t,duoc,*c;
void add(int *a,int *b) 
{   int add=0,*c;
    c=(int*)calloc(m+1,sizeof(int));
    if(m<n)
        for(i=1;i<=n-m;i++)
            a[m-1+i]=0;
    else 
        for(i=1;i<=m-n;i++)
            b[n-1+i]=0;
    if(m<n)m=n;
    else 
        n=m;
    for(i=0;i<m;i++)
    {
        c[i]=(a[i]+b[i]+add)%10;
        add=(a[i]+b[i]+add)/10;
    }
    if(add>0)
        c[m++]=add;  
    for(i=m-1;i>=0;i--)    // print out the result
    printf("%d",c[i]);
}
int Sosanh()
{
    i=m-1;
    while((a[i]==b[i])&&(i>=0))
        i--;
    if((i<0)||(a[i]>b[i]))
        return 1;
    else
        return 0;
}
void minus(int *a,int *b)
{   int nho=0,*c;
    c=(int*)calloc(m+1,sizeof(int));
    int tmp;
    if(m<n)
        for(i=1;i<=n-m;i++)
            a[m-1+i]=0;
    else 
        for(i=1;i<=m-n;i++)
            b[n-1+i]=0;
    if(m<n)m=n;
    else 
        n=m;
    if(!Sosanh())
    {
        printf("-");
        for(i=0;i<n;i++)
        {
            tmp=a[i];
            a[i]=b[i];
            b[i]=tmp;
        }
    }
    for(i=0;i<m;i++)
        if(a[i]-nho>=b[i])
        {
            c[i]=(a[i]-b[i]-nho)%10;
            nho=0;
        } 
        else
        {
            c[i]=(a[i]+10-b[i]-nho)%10;
            nho=1;
        }
        while(c[m-1]==0)
            m--;
        if(m==0)c[m++]=0;   
    for(i=m-1;i>=0;i--)    // print out the result
    printf("%d",c[i]);
}
//3.Multi
void mul(int *a,int *b)
{   int nho=0,len_max=m+n-1,*c,s;
    c=(int*)calloc(len_max,sizeof(int));
    for(i=1;i<=n;i++)
        a[m-1+i]=0; 
    for(i=1;i<=m;i++)
        b[n-1+i]=0;
    for(i=0;i<len_max;i++)
    {
        s=0;
        for(j=0;j<=i;j++)
            s+=a[j]*b[i-j];
        c[i]=(s+nho)%10;
        nho=(s+nho)/10;
    }
    if(nho>0)
        c[len_max++]=nho;
    for(i=len_max-1;i>=0;i--)
    printf("%d",c[i]);
}
//4.Devide
int compare(int *a,int*b,int d)
{
    int i;
    if((a[d-1]!=0)&&(d>0))
        return 1;
    for(i=0;i<n;i++)
        if(a[i+d]>b[i])
            return 1;
        else 
            if(a[i+d]<b[i])
                return 0;
        return 1;
}
void min(int *a,int*b,int d)
{
    int i,nho;
    nho=0;
    for(i=n-1;i>=0;i--)
        if(a[i+d]-nho<b[i])
        {
            a[i+d]=a[i+d]+10-nho-b[i];
            nho=1;
        }
        else
        {
            a[i+d]=a[i+d]-nho-b[i];
            nho=0;
        }
        if(nho==1)
            a[d-1]--;
}
void check_str()
{    int duoc;
    duoc=1;
    int j=0,k;
    while((b[j]==0)&&(j<n))
        j++;
    if(j==n)
        duoc=0;
    else 
    {
        for(k=j;k<n;k++)
            b[k-j]=b[k];
        n-=j;
    }
    j=0;
    while((a[j]==0)&&(j<m))
        j++;
    if(j==m)
    {
        m=1;a[0]=0;
    }
    else 
    {
        for(k=j;k<m;k++)
            a[k-j]=a[k];
        m-=j;
    }
}
void devide(int *a,int *b)
{    int d,tam,*c,t;
     c=(int*)calloc(m,sizeof(int));
    if(m>=n)
    {
        if(!compare(a,b,d))
            d++;
        while(d<=m-n)
        {
            tam=0;
            while(compare(a,b,d))
            {
                tam++;
                min(a,b,d);
            }
            c[t++]=tam;
            d++;
            if(a[i]==0)
                i++;
        }
        if(t==0)
            c[t++]=0;
    }
    else 
        c[t++]=0;
    while((a[i]==0)&&(i<m))
        i++;
    if(i==m)
        a[--i]=0;
}
